home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / edit / me_cd25.zip / MUTT2.ZIP / ALAMODE.MUT < prev    next >
Lisp/Scheme  |  1992-11-09  |  4KB  |  146 lines

  1.   ;; alamode.mut - set buffer modes.
  2.   ;; This stuff is called when a buffer is created or file read in.
  3.   ;; C Durland  Public Domain
  4.  
  5. ;; Routines:
  6. ;;   (default-major-mode mode-name)
  7. ;;     Default is none.  Call change to whatever you like.
  8. ;;   (none-mode)
  9. ;;     A do nothing mode
  10. ;;   (auto-mode-list (bool append)(string mode-re mode-name ...)
  11. ;;     Append or Prepend to the list of modes.
  12.  
  13. (include me2.h)
  14.  
  15. (defun MAIN
  16. {
  17.   (register-hook IBUFFER-CREATED-HOOK    "set-buffer-mode")
  18.   (register-hook IREAD-FILE-HOOK    "context-mode")
  19.  
  20.   (default-major-mode "none")
  21.   (auto-mode-list TRUE
  22.     '.*\.c$'    "c"
  23.     '.*\.h$'    "c"
  24.     '.*\.mut$'    "mutt"
  25.     '.*\.doc$'    "text"
  26.     '.*\.txt$'    "text"
  27.   )
  28. })
  29.  
  30.     ;; Set a mode for a buffer based on the buffer name.
  31.     ;; Notes:
  32.     ;;   Call this from interactive-buffer-created-hook.  That way
  33.     ;;     switch-to-buffer can have modes.
  34.     ;;   I use buffer name because the file name doesn't exist when the
  35.     ;;     buffer is created.
  36.     ;;   It might be a better idea to just wait til a file is read, look
  37.     ;;     for a context mode and if none, use the file name to set a mode.
  38.     ;;   Remember to remove "<n>" from the end of the buffer name.
  39. (defun set-buffer-mode
  40. {
  41.   (set-mode 
  42.     (if (re-string '\(.+\)<[0-9]+>$' (buffer-name -1))
  43.       (get-matched '\1')
  44.       (buffer-name -1)))
  45. })
  46.  
  47.     ;; Set the buffer mode.
  48.     ;; If the environment variable "MEMODE" is set (eg to "mail"), append
  49.     ;;   "-mode" to it and set that mode.  This is very handy where I want
  50.     ;;   be in mail mode when ME runs (eg when answering my mail).
  51.     ;; Otherwise, look at the name and try to figure out a mode from that.
  52. (defun set-mode (string filename) HIDDEN
  53. {
  54.   (if (!= "" (getenv "MEMODE"))
  55.   { 
  56.     (run-mode (getenv "MEMODE"))
  57.     (done)
  58.   })
  59.   (look-up-mode-in-list filename)
  60. })
  61.  
  62.     ;; look for string that sets mode.  May override (set-mode)
  63.     ;; "-*-text-*-" => (text-mode)
  64.     ;; Notes:
  65.     ;;   Look at GNU Emacs Manual pg 108 for more to do.
  66.     ;;   A problem with this is when you edit a X11 resource database
  67.     ;;     (xrdb) file.  If the first line is something like
  68.     ;;     *Font:    -*-prestige-medium-r-normal-*-120-*
  69.     ;;     this will try to run prestige-medium-r-normal-mode.  Not likely.
  70.     ;;     GnuEmacs also has this problem.  run-mode has a check for this
  71.     ;;     case.
  72. (defun context-mode
  73. {
  74.   (if (looking-at '.*-\*-\(.+\)-\*-')
  75.     (run-mode (get-matched '\1')))
  76. })
  77.  
  78.  
  79.  
  80. (list mode-list)    ;; (mode-RE mode-name) pairs
  81. (string the-default-major-mode)
  82.  
  83.  
  84.  
  85. (defun
  86.   none-mode { (clear-modes) }        ;; a do-nothing mode
  87.   default-major-mode (string mode-name)
  88.     { (the-default-major-mode mode-name) }
  89.   auto-mode-list (bool append) ;; (string mode-re mode-name ...)
  90.   {
  91.     (int n z)
  92.  
  93.     (z (if append 10000 -1))
  94.     (n 1)
  95.     (while (< n (nargs))
  96.       {
  97.     (insert-object mode-list z       (arg n))
  98.     (insert-object mode-list (+ 1 z) (arg (+ 1 n)))
  99.     (+= n 2)
  100.       })
  101.   }
  102. )
  103.  
  104. (defun
  105.   run-mode (string mode) HIDDEN
  106.   {
  107.     (if (pgm-exists (concat mode "-mode"))
  108.       (floc (concat mode "-mode")())
  109.       (msg "Unknown mode: " mode))
  110.   }
  111.   look-up-mode-in-list (string name) HIDDEN
  112.   {
  113.     (int len n)
  114.  
  115.     (len (length-of mode-list))
  116.     (n 0)
  117.     (while (< n len)
  118.       {
  119.     (if (re-string (extract-element mode-list n) name)
  120.       {
  121.         (run-mode (extract-element mode-list (+ 1 n)))
  122.         (done)
  123.       })
  124.     (+= n 2)
  125.       })
  126.     (run-mode the-default-major-mode)
  127.   }
  128. )
  129.  
  130. ;(defun
  131. ;  dump-list
  132. ;  {
  133. ;    (int n z)
  134. ;
  135. ;    (n (length-of mode-list))
  136. ;    (z 0)
  137. ;    (while (< z n)
  138. ;      {
  139. ;    (msg (extract-element mode-list z) "   "
  140. ;         (extract-element mode-list (+ 1 z)))
  141. ;    (get-key)
  142. ;    (+= z 2)
  143. ;      })
  144. ;      (msg "done " n)
  145. ;  })
  146.